package com.example.contactos;

import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class Agenda_Test {

	private Agenda agenda;
	private Pessoa pessoa1;
	private Pessoa pessoa2;
	private Pessoa pessoa3;

	@Before
	public void setUp() throws Exception {
		agenda = Agenda.getInstance();
		
		pessoa1 = new Pessoa("teste1", 123);
		agenda.adicionar(pessoa1);
		
		pessoa2 = new Pessoa("teste2", 456);
		agenda.adicionar(pessoa2);		
		
		pessoa3 = new Pessoa("teste3", 789);	
	}

	@After
	public void tearDown() throws Exception {
		agenda.cleanup();
		pessoa1 = null;
		pessoa2 = null;
		pessoa3 = null;
		
		System.out.println("After");
	}

	@Test
	public final void testAdicionar() {
		System.out.println("Teste 1");
		Pessoa pessoa4, pessoa5, pessoa6;
		int sizeAntes = agenda.getAll().size();
		
		pessoa4 = new Pessoa("teste4", 123);
		agenda.adicionar(pessoa4);
		
		pessoa5 = new Pessoa("teste5", 456);
		agenda.adicionar(pessoa5);		
		
		pessoa6 = new Pessoa("teste6", 789);	
		
		assertTrue(agenda.getAll().contains(pessoa4));
		assertTrue(agenda.getAll().contains(pessoa5));
		assertFalse(agenda.getAll().contains(pessoa6));
		
		assertEquals("Falha na contagem de itens da lista de contactos!!", agenda.getAll().size(), sizeAntes + 2);
	}

	@Test
	public final void testPesquisar() {
		ArrayList<Pessoa> pesquisar = agenda.pesquisar("teste");
		
		System.out.println("Teste 2");
		for (Pessoa p : Agenda.getInstance().getAll()) {
			System.out.println(' ' + p.getNome());
		}
		
		assertEquals(2, pesquisar.size());
		
		assertTrue(pesquisar.contains(pessoa1));
		assertTrue(pesquisar.contains(pessoa2));
		assertFalse(pesquisar.contains(pessoa3));
		
		// ---
		
		pesquisar = agenda.pesquisar("teste1");

		assertEquals(1, pesquisar.size());
		
		assertTrue(pesquisar.contains(pessoa1));
		assertFalse(pesquisar.contains(pessoa2));
		assertFalse(pesquisar.contains(pessoa3));
		
		// ---
		
		pesquisar = agenda.pesquisar("testeSemResultados");

		assertEquals(0, pesquisar.size());
		
		assertFalse(pesquisar.contains(pessoa1));
		assertFalse(pesquisar.contains(pessoa2));
		assertFalse(pesquisar.contains(pessoa3));
	}

	@Test
	public final void testGetAll() {
		System.out.println("teste 3");
		ArrayList<Pessoa> contactos = (ArrayList<Pessoa>) agenda.getAll();
		
		assertEquals(2, contactos.size());
	}

}
